package cn.tedu.v4;

import org.omg.CORBA.PUBLIC_MEMBER;

/**
 * 多线程并发安全问题：
 * 当多个线程并发操作同一个资源时，由于线程切换时机不确定
 * 可能会导致代码执行混乱，而且还有可能出现程序错误、严重软件瘫痪【卡死】
 *
 * 客户端  多线程并发  ×      服务器端  多线程并发   √
 *
 *
 * synchronized   关键字   ---   多线程并发   同步锁
 *
 * 使用方法①：同步块方式   最常用，同步：控制线程执行顺序，避免线程之间冲突
 *       ②：同步方法   一个线程执行完毕之后，在执行下一个
 * 定义语法：
 *     synchronized(同步监视器对象){
 *         需要同步运行的代码块;
 *     }
 *
 */
public class Thread_syn {
    public static void main(String[] args) {
        //创建洗漱类
        XS xs=new XS();
        //创建第一个人--线程
        Thread s1=new Thread(()->{
            xs.door();//去洗漱功能
        });
        Thread s2=new Thread(()->{
            xs.door();//去洗漱功能
        });
        s1.start();
        s2.start();
    }
}
//创建洗漱类
class XS{
    public void door(){
        //线程实例--记录线程信息
        Thread s=Thread.currentThread();
        System.out.println(s.getName()+"去洗漱");

        try {
            //同步锁:们加一把锁功能
            synchronized (this) {
                Thread.sleep(5000);
                System.out.println(s.getName() + "找洗漱池准备洗漱");
            }
            Thread.sleep(3000);
            System.out.println(s.getName()+"洗漱完毕");
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}
